package com.third.utils.wx;

import java.io.InputStream;

import com.third.base.wx.WXPayConstants;
import com.third.base.wx.WXPayDomain;

//微信支付参数配置
public abstract class WxPayConfig {
	/*------支付交易类型:trade_type----------*/
	public static final String JSAPI = "JSAPI";// 公众号支付或者小程序支付,微信浏览器必须使用公众号支付h5不行，该支付只用于微信浏览器（返回订单信息，调用JSSDK完成支付）
	public static final String NATIVE = "NATIVE";// 原生扫码支付(支付返回一个二维码链接)
	public static final String APP = "APP";// app支付（返回订单信息，调用原生SDK完成支付）
	public static final String MWEB = "MWEB";// H5支付，用于非微信浏览器(支付返回一个跳转支付链接)

    /**
     * 获取 App ID
     *
     */
    public abstract String getAppID();
	/**
	 * 获取 Mch ID
	 *
	 */
	public abstract String getMchID();

	/**
	 * 获取支付密钥
	 * 
	 * 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
	 *
	 */
	public abstract String getKey();

	/**
	 * 获取商户证书内容
	 *
	 * @return 商户证书内容
	 */
	public abstract InputStream getCertStream();

	/**
	 * 获取WXPayDomain, 用于多域名容灾自动切换
	 */
	public abstract WXPayDomain getWXPayDomain();

	/**
	 * 回掉路径
	 *
	 */
	public abstract String getNotifyUrl();

	/**
	 * 支付成功跳转页面
	 *
	 */
	public abstract String getReturnUrl();

	/**
	 * 是否是沙箱环境true是
	 *
	 */
	public abstract boolean getUseSandbox();

	/**
	 * HTTP(S) 连接超时时间，单位毫秒
	 *
	 */
	public int getHttpConnectTimeoutMs() {
		return 6 * 1000;
	}

	/**
	 * HTTP(S) 读数据超时时间，单位毫秒
	 *
	 */
	public int getHttpReadTimeoutMs() {
		return 8 * 1000;
	}

	/**
	 * 是否自动上报。 若要关闭自动上报，子类中实现该函数返回 false 即可。
	 *
	 */
	public boolean shouldAutoReport() {
		return true;
	}

	/**
	 * 进行健康上报的线程的数量
	 *
	 * @return
	 */
	public int getReportWorkerNum() {
		return 6;
	}

	/**
	 * 健康上报缓存消息的最大数量。会有线程去独立上报 粗略计算：加入一条消息200B，10000消息占用空间 2000 KB，约为2MB，可以接受
	 *
	 */
	public int getReportQueueMaxSize() {
		return 10000;
	}

	/**
	 * 批量上报，一次最多上报多个数据
	 *
	 */
	public int getReportBatchSize() {
		return 10;
	}
	public class WxPayDomainCase implements WXPayDomain {

		@Override
		public void report(String domain, long elapsedTimeMillis, Exception ex) {
			// TODO Auto-generated method stub

		}

		@Override
		public DomainInfo getDomain(WxPayConfig config) {
			DomainInfo domainInfo = new DomainInfo(WXPayConstants.DOMAIN_API, true);
			return domainInfo;
		}

	}

}
